home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 44 / Amiga Format CD44 (1999-08-26)(Future Publishing)(GB)(Track 1 of 3)[!][issue 1999-10].iso / -in_the_mag- / basics / blitz / bdchunkylib.lha / BDChunkyLib.asc next >
Text File  |  1998-05-20  |  13KB  |  525 lines

  1. #bdchunkylib=10
  2.  
  3. ;--------------------------------------------------------
  4. ; How to install it, if you need another lib's number :
  5. ;
  6. ; First : Change the value of #bdchklib to a free number.
  7. ; ------  ( Have a look to DefLibMan in BUM9 )
  8. ;
  9. ; Second: Make blitzlibs:libmacs.res resident
  10. ; ------  ,select only 'Make Smallest Code'
  11. ;         in the Compiler Options
  12. ;         and create an executable ( BDChunkyLib.obj )
  13. ;
  14. ; Third : Remake your Deflibs ( via DefLibMan for example )
  15. ; ------
  16. ;________________________________________________________
  17.  
  18. !libheader {#bdchunkylib,0,0,0,0}
  19.  
  20. !dumtoke{"NChunky","is a Chunky Buffer from the BDChunkyLib  ;-)",_toke}
  21.  
  22. !acommand {#long}
  23. !args {#long,#long,#long}
  24. !libs {#bdchunkylib,#ia3|#pd0}
  25. !subs {_InitNChunky,0,0}
  26. !name {"InitNChunky","NChunky#,Width.l,Height.l"}
  27.  
  28. !acommand {#long}
  29. !args {#long,#long}
  30. !libs {#graphicslib,#la6}
  31. !subs {_NChunkyToBtmA,0,0}
  32. !name {"NChunkyToBtmA","*AddrNChunky.l, *AddrBitMap.l"}
  33.  
  34. !acommand {#long}
  35. !args {#long,#long}
  36. !libs {#graphicslib,#la6}
  37. !subs {_BtmToNChunkyA,0,0}
  38. !name {"BtmToNChunkyA","*AddrBtm.l, *AddrNChunky.l"}
  39.  
  40. !astatement
  41. !args {#long,#long,#long,#byte}
  42. !libs {#bdchunkylib,#ia3|#pd0}
  43. !subs {_NCPlot,0,0}
  44. !name {"NCPlot","NChunky#, x.l, y.l, colour.b"}
  45.  
  46. !afunction {#byte}
  47. !args {#long,#long,#long}
  48. !libs {#bdchunkylib,#ia3|#pd0}
  49. !subs {_NCPoint,0,0}
  50. !name {"NCPoint","( NChunky#, x.l, y.l )"}
  51.  
  52. !astatement
  53. !args {#long,#long,#long,#long,#long,#byte}
  54. !libs {#bdchunkylib,#ia3|#pd0}
  55. !subs {_NCBoxF,0,0}
  56. !name {"NCBoxF","NChunky#, x1.l, y1.l, x2.l, y2.l, colour.b"}
  57.  
  58. !astatement
  59. !args {#long,#long,#long,#long,#long,#byte}
  60. !libs {#bdchunkylib,#ia3|#pd0}
  61. !subs {_NCBox,0,0}
  62. !name {"NCBox","NChunky#, x1.l, y1.l, x2.l, y2.l, colour.b"}
  63.  
  64. !acommand {#long}
  65. !args {#long,#long}
  66. !libs {#bdchunkylib,#ia0|#pd0,#bdchunkylib,#ia1|#pd1}
  67. !subs {_CopyNChunky,0,0}
  68. !name {"CopyNChunky","NChunkySrc#, NChunkyDest#"}
  69.  
  70. !astatement
  71. !args {#long,#byte}
  72. !libs {#bdchunkylib,#ia3|#pd0}
  73. !subs {_NCCls,0,0}
  74. !args {#long}
  75. !libs {#bdchunkylib,#ia3|#pd0}
  76. !subs {_NCCls1,0,0}
  77. !name {"NCCls","NChunky# [,colour.b ]"}
  78.  
  79. !acommand {#long}
  80. !args {#long,#long}
  81. !libs {#bdchunkylib,#ia0|#pd0,#bitmaplib,#ia1|#pd1,#graphicslib,#la6}
  82. !subs {_NChunkyToBtm,0,0}
  83. !name {"NChunkyToBtm","NChunky#, BitMap#"}
  84.  
  85. !acommand {#long}
  86. !args {#long,#long}
  87. !libs {#bitmaplib,#ia1|#pd0,#bdchunkylib,#ia0|#pd1,#graphicslib,#la6}
  88. !subs {_BtmToNChunky,0,0}
  89. !name {"BtmToNChunky","BitMap#, NChunky#"}
  90.  
  91. !afunction {#long}
  92. !args {#long,#long}
  93. !libs
  94. !subs {_InitNChunkyA,0,0}
  95. !name {"InitNChunkyA","( Width.l,Height.l )"}
  96.  
  97. !acommand {#long}
  98. !args {#long}
  99. !libs
  100. !subs {_FreeNChunkyA,0,0}
  101. !name {"FreeNChunkyA","( *AddrNChunky )"}
  102.  
  103. !astatement
  104. !args {#long,#long,#long,#byte}
  105. !libs
  106. !subs {_NCPlotA,0,0}
  107. !name {"NCPlotA","*AddrNChunky.l, x.l, y.l, colour.b"}
  108.  
  109. !afunction {#byte}
  110. !args {#long,#long,#long}
  111. !libs
  112. !subs {_NCPointA,0,0}
  113. !name {"NCPointA","( *AddrNChunky.l, x.l, y.l )"}
  114.  
  115. !astatement
  116. !args {#long,#long,#long,#long,#long,#byte}
  117. !libs
  118. !subs {_NCBoxFA,0,0}
  119. !name {"NCBoxFA","*AddrNChunky.l ,x1.l ,y1.l ,x2.l ,y2.l ,colour.b"}
  120.  
  121. !astatement
  122. !args {#long,#long,#long,#long,#long,#byte}
  123. !libs
  124. !subs {_NCBoxA,0,0}
  125. !name {"NCBoxA","*AddrNChunky.l ,x1.l ,y1.l ,x2.l ,y2.l ,colour.b"}
  126.  
  127. !acommand {#long}
  128. !args {#long,#long}
  129. !libs
  130. !subs {_CopyNChunkyA,0,0}
  131. !name {"CopyNChunkyA","*AddrNChunkySrc.l ,*AddrNChunkyDest.l"}
  132.  
  133. !astatement
  134. !args {#long,#byte}
  135. !libs
  136. !subs {_NCClsA,0,0}
  137. !name {"NCClsA","*AddrNChunky.l ,colour.b"}
  138.  
  139. !astatement
  140. !args {#long,#long,#long}
  141. !libs
  142. !subs {_RemapNChunkyLineA,0,0}
  143. !name {"RemapNChunkyLineA","*AddrNChunky.l ,y.l ,&RemapTable.l"}
  144.  
  145. !astatement
  146. !args {#long,#long,#long}
  147. !libs {#bdchunkylib,#ia3|#pd0}
  148. !subs {_RemapNChunkyLine,0,0}
  149. !name {"RemapNChunkyLine","NChunky# ,y.l ,&RemapTable.l"}
  150.  
  151. !astatement
  152. !args {#long,#long,#long,#long}
  153. !libs
  154. !subs {_RemapNChunkyPointA,0,0}
  155. !name {"RemapNChunkyPointA","*AddrNChunky.l ,x, y.l ,&RemapTable.l"}
  156.  
  157. !astatement
  158. !args {#long,#long,#long,#long}
  159. !libs {#bdchunkylib,#ia3|#pd0}
  160. !subs {_RemapNChunkyPoint,0,0}
  161. !name {"RemapNChunkyPoint","NChunky# ,x.l ,y.l ,&RemapTable.l"}
  162.  
  163.  
  164.  
  165. _load:!nullsub{0,0,0}
  166. _save:!nullsub{0,0,0}
  167. _use:!nullsub{0,0,0}
  168. _free:!nullsub{_FreeNChunky,0,0}
  169.  
  170. !libfin{_toke,_load,_save,_use,_free,50,5}
  171.  
  172. !libfin
  173.  
  174. ;
  175. ; Definition d'un NChunky...
  176. ;
  177.  
  178. NEWTYPE.NChunky
  179.   Width.l       ; Width of picture
  180.   Height.l      ; Height of picture
  181.   Size.l        ; Size of buffer
  182.   AWidth.l      ; Aligned Width for buffer
  183.   *ChunkyData.b ; The datas
  184. End NEWTYPE
  185.  
  186. ;-----------------------------
  187. ;-----------------------------
  188. ._InitNChunkyA:
  189.   MOVE.l  d1,d2         ;d2=height
  190.   MOVE.l  d0,d1         ;d1=width
  191.   MOVEM.l d1/d2,-(a7)
  192.   MOVE.l  #32,d0        ;Size of object NChunky
  193.   MOVE.l  #$10001,d1    ;Mem Type   = #MEMF_PUBLIC|#MEMF_CLEAR
  194.   ALibJsr $c002         ;Alloc mem for NChunky object
  195.   MOVEA.l d0,a3
  196.   MOVEM.l (a7)+,d1/d2
  197.   BRA     _NChunkyEmpty
  198. ._InitNChunky:
  199.   MOVE.l  8(a3),d0      ; Test SizeFast
  200.   BEQ     _NChunkyEmpty ; => Empty => Ok
  201.   MOVEA.l 16(a3),a1     ;
  202.   MOVEM.l d1/d2,-(a7)   ;
  203.   ALibJsr $c003         ; Free Old NChunky
  204.   MOVEM.l (a7)+,d1/d2   ;
  205. _NChunkyEmpty:          ; Alloc a new NChunky
  206.   MOVE.l  d1,d0         ;
  207.   ADD.l   #15,d0        ;
  208.   AND.l   #$FFFFFFF0,d0 ;
  209.   MULU    d2,d0         ;SizeFast.l = (((w+15) LSL 4) LSR 4)*h
  210.   MOVEM.l d0-d3,-(a7)
  211.   MOVE.l  #$10001,d1    ;Mem Type   = #MEMF_PUBLIC|#MEMF_CLEAR
  212.   ALibJsr $c002
  213.   CMP     #0,d0
  214.   BEQ     EndInitNChunky
  215.   MOVE.l  d0,16(a3)
  216.   MOVEM.l (a7)+,d0-d3
  217.   MOVE.l  d1,  (a3)     ;Store w
  218.   MOVE.l  d2, 4(a3)     ;Store h
  219.   MOVE.l  d0, 8(a3)     ;Store SizeFast
  220.   ADD.l   #15,d1        ;
  221.   LSR     #3,d1         ;
  222.   AND.w   #$FFFE,d1     ;
  223.   LSL     #3,d1         ;
  224.   MOVE.l  d1,12(a3)     ;Aligned Width=(((w+15) LSR 3) AND $fffe) lsl 3
  225.   MOVE.l  a3,d0
  226. EndInitNChunky:
  227.   RTS
  228.  
  229. ;-----------------------------
  230. ;-----------------------------
  231. ._FreeNChunkyA:
  232.   MOVEA.l d0,a3
  233.   MOVEQ   #0,d5
  234.   BSR     _FreeNChunky
  235.   TST     d5
  236.   BEQ     _FreeDoneA
  237.   MOVEA.l a3,a1
  238.   MOVE.l  #32,d0
  239.   ALibJsr $c003
  240.   MOVEQ   #-1,d5
  241. _FreeDoneA:
  242.   MOVE.l  d5,d0
  243.   RTS
  244.  
  245. ._FreeNChunky:
  246.   MOVE.l  8(a3),d0  ;Get SizeFast
  247.   BEQ     _FreeDone
  248.   MOVEA.l 16(a3),a1 ;Get Chunky Addr
  249.   ALibJsr $c003
  250.   CLR.l 4(a3)       ;Clear NChunky
  251.   CLR.l 8(a3)       ;
  252.   CLR.l 12(a3)      ;
  253.   CLR.l 16(a3)      ;
  254.   CLR.l (a3)        ;
  255. _FreeDone
  256.   MOVEQ #0,d5
  257.   RTS
  258.  
  259. ;-----------------------------
  260. _AllocRst
  261.   MOVE.l  #$10000,d1         ;#MEMF_ANY|#MEMF_CLEAR
  262.   MOVE.l  #100,d0            ;SizeOf.RastPort
  263.   ALibJsr $c002              ;AllocMem
  264.   RTS
  265.  
  266. ;-----------------------------
  267. _PrepareMoveData
  268.   MOVE.l  0(a0),w           ;Get w
  269.   MOVE.l  4(a0),h           ;Get h
  270.   MOVEA.l 16(a0),a0
  271.   MOVE.l  a0,chky           ;Get chky
  272.   MOVE.l  a1,btm            ;Get btm
  273.   BSR     _AllocRst         ;Alloc Rastport 1
  274.   MOVE.l  d0,rst1           ;
  275.   BNE     _AllocRst2        ;No Rastport ?
  276.   MOVEQ   #0,d5             ;succes=0
  277.   BRA    _Fin1
  278. _AllocRst2
  279.   BSR     _AllocRst         ;Alloc Rastport 2
  280.   MOVE.l  d0,rst2           ;
  281.   BNE     _InitBtm          ;No Rastport ?
  282.   MOVEA.l rst1,a1           ;
  283.   MOVE.l  #100,d0           ;
  284.   ALibJsr $c003             ;FreeMem of Rastport 1
  285.   MOVEQ   #0,d5             ;succes=0
  286.   BRA     _Fin1
  287. _InitBtm
  288.   MOVE.l  w,d0
  289.   ADD.l   #15,d0
  290.   LSL     #4,d0
  291.   LSR     #1,d0             ;sizex     =((w+15) LSL 4) LSR 1
  292.   MOVEQ   #1,d1             ;sizey     =1
  293.   MOVEA.l btm,a0
  294.   MOVEQ   #0,d2
  295.   MOVE.b  5(a0),d2          ;depth     =*AddrBtm\Depth
  296.   MOVEQ   #1,d3             ;flags     =#BMF_CLEAR
  297.   MOVEQ   #0,d4             ;friend btm=0
  298.   JSR     -918(a6)          ;AllocBitMap
  299.   MOVE.l  d0,btm2           ;Get btm2
  300.   CMP     #0,d0
  301.   BNE     _InitRst
  302.   MOVEA.l rst1,a1
  303.   MOVE .l #100,d0
  304.   ALibJsr $c003
  305.   MOVEA.l rst2,a1
  306.   MOVE.l  #100,d0
  307.   ALibJsr $c003
  308.   MOVEQ   #0,d5             ;succes=0
  309.   BRA     _Fin1
  310. _InitRst
  311.   MOVEA.l rst1,a1
  312.   JSR     -198(a6)          ;InitRastPort
  313.   MOVEA.l rst2,a1
  314.   JSR     -198(a6)
  315.   MOVEA.l rst1,a0           ;
  316.   MOVEA.l rst2,a1           ;
  317.   MOVE.l  #0,(a1)           ;rst2\Layer=0
  318.   MOVE.l  btm2,4(a1)        ;rst2\BitMap=btm2
  319.   MOVE.l  btm ,4(a0)        ;rst1\BitMap=btm
  320.   MOVEQ   #0,d0             ;
  321.   MOVEQ   #0,d1             ;
  322.   MOVE.l  w,d2              ;
  323.   MOVE.l  h,d3              ;
  324.   SUBQ    #1,d2             ;
  325.   SUBQ    #1,d3             ;
  326.   MOVEA.l chky,a2           ;
  327.   MOVEQ   #1,d5             ;succes=1
  328. _Fin1:
  329.   RTS
  330.  
  331. _FreeData:
  332.   MOVEA.l btm2,a0
  333.   JSR     -924(a6)          ;FreeBitMap
  334.   MOVEA.l rst1,a1
  335.   MOVE.l  #100,d0
  336.   ALibJsr $c003
  337.   MOVEA.l rst2,a1
  338.   MOVE.l  #100,d0
  339.   ALibJsr $c003
  340.   RTS
  341.  
  342. ;-----------------------------
  343. ;-----------------------------
  344. ._NChunkyToBtmA:
  345.   MOVEA.l d1,a1
  346.   MOVEA.l d0,a0
  347. ._NChunkyToBtm:
  348.   BSR     _PrepareMoveData  ;
  349.   TST     d5
  350.   BEQ     _EndNCtoB
  351.   JSR     -786(a6)          ;WritePixelArray8
  352.   MOVE.l  d0,d5
  353.   BSR     _FreeData
  354. _EndNCtoB:
  355.   MOVE.l  d5,d0
  356.   RTS
  357.  
  358. ;-----------------------------
  359. ;-----------------------------
  360. ._BtmToNChunkyA:
  361.   MOVEA.l d0,a1
  362.   MOVEA.l d1,a0
  363. ._BtmToNChunky:
  364.   BSR     _PrepareMoveData  ;
  365.   TST     d5
  366.   BEQ     _EndBtoNC
  367.   JSR     -780(a6)          ;ReadPixelArray8
  368.   MOVE.l  d0,d5
  369.   BSR     _FreeData
  370. _EndBtoNC:
  371.   MOVE.l  d5,d0
  372.   RTS
  373.  
  374. ;-----------------------------
  375. ;-----------------------------
  376. ._NCPlotA:
  377.   MOVEA.l d0,a3
  378. ._NCPlot:
  379.   MOVE.l  12(a3),d0           ; d0=AWidth
  380.   MOVEA.l 16(a3),a0           ; a0=*ChunkyData
  381.   MULU    d2,d0               ; d0=y*AWidth
  382.   ADD.l   d1,d0               ; d0=d0+x
  383.   MOVE.b  d3,0(a0,d0.l)       ;
  384.   RTS
  385.  
  386. ;-----------------------------
  387. ;-----------------------------
  388. ._NCPointA:
  389.   MOVEA.l d0,a3
  390. ._NCPoint:
  391.   MOVE.l  12(a3),d0
  392.   MOVEA.l 16(a3),a0
  393.   MULU    d2,d0
  394.   ADD.l   d1,d0
  395.   MOVE.b  0(a0,d0.l),d0
  396.   RTS
  397.  
  398. ;-----------------------------
  399. ;-----------------------------
  400. ._RemapNChunkyLineA:
  401.   MOVEA.l d0    ,a3           ; a3=Addr NChunky
  402. ._RemapNChunkyLine:
  403.   MOVE.l    (a3),d4           ;
  404.   SUBQ    #1,d4               ; d4=Width-1
  405.   MOVE.l  12(a3),d0           ; d0=AWidth
  406.   MOVEA.l 16(a3),a0           ; a0=*ChunkyData
  407.   MOVEA.l d2,a1               ; a1=&RemapTable(0)
  408.   MULU    d0,d1               ; d1=AWidth*Y
  409.   MOVEQ   #0,d6               ; X=0
  410. _RemapLine:
  411.   MOVE.l  d1,d7               ; d7=AWidth*Y
  412.   ADD.l   d6,d7               ; d7=X+(AWidth*Y)
  413.   MOVEQ   #0,d5               ; d5=0
  414.   MOVE.b  0(a0,d7.l),d5       ; NCPoint
  415.   ANDI.w  #$FF,d5             ; d5 => 0 a 255
  416.   MOVE.b  0(a1,d5.w),d0       ; d0=RemapTable(d5)
  417.   MOVE.b  d0,0(a0,d7.l)       ; NCPlot
  418.   ADDQ    #1,d6               ; d6=X+1
  419.   CMP.l   d6,d4               ; Tst d6=d4 ?
  420.   BPL     _RemapLine          ;
  421.   RTS
  422.  
  423. ;-----------------------------
  424. ;-----------------------------
  425. ._RemapNChunkyPointA:
  426.   MOVEA.l d0    ,a3           ; a3=Addr NChunky
  427. ._RemapNChunkyPoint:
  428.   MOVE.l    (a3),d4           ;
  429.   MOVE.l  12(a3),d0           ; d0=AWidth
  430.   MOVEA.l 16(a3),a0           ; a0=*ChunkyData
  431.   MOVEA.l d3,a1               ; a1=&RemapTable(0)
  432.   MULU    d0,d2               ; d2=AWidth*Y
  433.   ADD.l   d1,d2               ; d2=X+(AWidth*Y)
  434.   MOVEQ   #0,d5               ; d5=0
  435.   MOVE.b  0(a0,d2.l),d5       ; NCPoint
  436.   ANDI.w  #$FF,d5             ; d5 => 0 a 255
  437.   MOVE.b  0(a1,d5.w),d0       ; d0=RemapTable(d5)
  438.   MOVE.b  d0,0(a0,d2.l)       ; NCPlot
  439.   RTS
  440.  
  441. ;-----------------------------
  442. ;-----------------------------
  443. ._NCBoxFA:
  444.   MOVEA.l d0,a3
  445. ._NCBoxF:
  446. _LoopBoxFY:
  447.   MOVE.l  12(a3),d0       ; d0=AWidth
  448.   MOVEA.l 16(a3),a0       ;
  449.   MULU    d2,d0           ; d0=y1*AWidth
  450.   MOVE.l  d1,d6           ; d6=x1
  451. _LoopBoxFX:
  452.   MOVE.l  d0,d7           ; d7=y1*AWidth
  453.   ADD.l   d6,d7           ; d7=x1+(y1*AWidth)
  454.   MOVE.b  d5,0(a0,d7.l)   ; Poke d5
  455.   ADDQ    #1,d6           ; d6=x1+1
  456.   CMP.l   d6,d3           ; Tst d6=d3 ?
  457.   BPL     _LoopBoxFX      ;
  458.   ADDQ    #1,d2           ; d2=y1+1
  459.   CMP.l   d2,d4           ; Tst d2=d4 ?
  460.   BPL     _LoopBoxFY      ;
  461.   RTS
  462.  
  463. ;-----------------------------
  464. ;-----------------------------
  465. ._NCBoxA:
  466.   MOVEA.l d0,a3
  467. ._NCBox:
  468.  
  469.   RTS
  470.  
  471. ;-----------------------------
  472. ;-----------------------------
  473. ._CopyNChunkyA:
  474.   MOVEA.l d0,a0
  475.   MOVEA.l d1,a1
  476. ._CopyNChunky:
  477.   MOVE.l  8(a0),d2
  478.   MOVE.l  8(a1),d3
  479.   CMP.l   d2,d3
  480.   BEQ     _DoCopy
  481.   MOVEQ   #0,d5
  482.   BRA     _ErrorCopy
  483. _DoCopy:
  484.   MOVEA.l 16(a0),a0
  485.   MOVEA.l 16(a1),a1
  486.   MOVE.l  d2,d0
  487.   MOVE.l  4,a6
  488.   JSR     -624(a6)    ;CopyMem(a0/a1,d0)
  489.   MOVEQ   #-1,d5
  490. _ErrorCopy:
  491.   MOVE.l  d5,d0
  492.   RTS
  493.  
  494. ;-----------------------------
  495. ;-----------------------------
  496. ._NCClsA:
  497.   MOVEA.l d0,a3
  498.   BRA     _NCCls
  499. _NCCls1:
  500.   MOVEQ   #0,d1
  501. ._NCCls:
  502.   MOVEQ   #0,d5     ;
  503.   MOVE.b  d1,d5     ; d5=color.b
  504.   MOVEQ   #0,d1     ; d1=x1=0
  505.   MOVEQ   #0,d2     ; d2=y1=0
  506.   MOVE.l  (a3),d3   ; d3=x2=width
  507.   MOVE.l  4(a3),d4  ; d4=x3=height
  508.   SUBQ    #1,d3     ; width-1      !!!!
  509.   SUBQ    #1,d4     ; height-1     !!!!
  510.   BSR     _NCBoxF   ; Do a filled Box
  511.   RTS
  512.  
  513. ;-----------------------------
  514. ;-----------------------------
  515. Even
  516. w:        Dc.l 0
  517. h:        Dc.l 0
  518. rst1:     Dc.l 0
  519. rst2:     Dc.l 0
  520. btm:      Dc.l 0
  521. btm2:     Dc.l 0
  522. chky:     Dc.l 0
  523. version:  Dc.b "$VER: BD-Chunky-Library v1.0 (20/05/1998)",0
  524. Even
  525.